package com.example.demo.study.lambda;

/**
 * Map集合
 * Map类型不支持stream，不过Map提供了一些新的有用的方法来处理一些日常任务。
 * Java8为Map新增的方法：
 */
public class LambdaMap {

    /**
     * Object compute(Object key, BiFunction remappingFunction):
     * 该方法使用remappingFunction根据原key-value对计算一个新的value。
     * 只要新的value不为null，就使用新的value覆盖原value；如果新的value为null，则删除原key-value对；
     *
     * Object computeIfAbsent(Object key, Function mappingFunction):
     * 如果传入的key参数在Map中对应的value为null，
     * 该方法将使用mappingFunction根据原key、value计算一个新的结果，则用该计算结果覆盖原value；
     * 如果传入的key参数在Map中对应的value为null，则该方法不做任何事情；如果原Map原来不包括该key，
     * 该方法可能会添加一组key-value对。
     *
     * Object computeIfPresent(Object key, BiFunction remappingFunction):
     * 如果传给该方法的key参数在Map中对应的value不为null，
     * 该方法将使用remappingFunction根据原key、value计算一个新结果，并且该计算结果不为null，
     * 则使用该结果覆盖原来的value；
     * 如果计算结果为null，则删除原key-value对。
     *
     * void forEach(BiConsumer action):
     * 该方法是Java8为Map新增的一个遍历key-value对的方法。
     *
     * Object getOrDefault(Object key, V defaultValue):
     * 获取指定的key对应的value。如果该key不存在，则返回defaultValue。
     *
     * Object merge(Object key, Object value, BiFunction remappingFunction):
     * 该方法会先根据key参数获取该Map中对应的value。如果获取的value为null，
     * 则直接使用传入的value覆盖原value（在这种情况下，可能会添加一组key-value）；
     * 如果获取的value不为null，则使用remappingFunction函数根据原value、新value计算一个新的结果，并用新的结果去覆盖原有的value。
     *
     * Object putIfAbsent(Object key, Object value):
     * 该方法会自动检测指定的key对应的value是否为null，如果该key对应的value为null，则使用传入的新value代替原来的null。
     * 如果该key对应的value不是null，那么该方法不做任何事情。
     *
     * Object replace(Object key, Object value):
     * 将Map中指定key对应的value替换成新value并把被替换掉的旧值返回。
     * 如果key在Map中不存在，该方法不会添加key-value对，而是返回null。
     *
     * Boolean replace(K key, V oldValue, V newValue):
     * 将Map中指定的key-value对的原value替换成新value。
     * 如果在Map中找到指定的key-value对，则执行替换并返回true，否则返回false。
     *
     * replaceAll(BiFunction function):
     * 该方法使用function对原key-value对执行计算，并将计算结果作为key-value对的value值
     */
}
